El usuario administrador del ejercicio es: admini
Todos los comandos se ejecutan siendo root.
 
comprobar la version de centos, aunque esta guia sirve para centos 7 y 8
[root@admini ~]# cat /etc/centos-release

Paso 1 - Base
** Si es necesario editar las interfaces usar
[root@admini ~]# nmtui

comprobar paquetes instalados
[root@admini ~]# rpm -q httpd
[root@admini ~]# rpm -q mod_ssl

instalar herramienta dig, para solución de problemas con DNS. (no requerido para HTTP/S)
[root@admini ~]# yum -y install bind-utils

comprobar nombre del servidor
[root@admini ~]# hostname

limpiar cache de descargas y actualizar
[root@admini ~]# yum clean all
[root@admini ~]# yum update -y
[root@admini ~]# yum install httpd

iniciar, habilitar y comprobar estado de httpd
[root@admini ~]# systemctl start httpd
[root@admini ~]# systemctl enable httpd
[root@admini ~]# systemctl status httpd

habilitar http en cortafuegos
[root@admini ~]# firewall-cmd --add-service=http
[root@admini ~]# firewall-cmd --add-port=80/tcp

##comprobar si abre página en cliente##

Paso 2 - Virtual Host
buscar y descomentar o agregar al final del archivo
[root@admini ~]# vim /etc/httpd/conf/httpd.conf

# inicio de las lineas a agregar
	<VirtualHost *:80>
		DocumentRoot /var/www/html/grd35.local
		<Directory /var/www/html/grd35.local>
			Require all granted
		</Directory>
		DirectoryIndex index.html
		ServerName web.grd35.local
		ErrorLog /var/log/httpd/grd35.local-error_log
		CustomLog /var/log/httpd/grd35.local-access_log common
	</VirtualHost>
# fin de las lineas a agregar

crear el directorio y archivo index en la ruta
[root@admini ~]# mkdir -p /var/www/html/grd35.local
[root@admini ~]# vi /var/www/html/grd35.local/index.html

# inicio de las lineas a agregar
<html>
	<head>
		<title>Bienvenido al grd35</title>
	</head>
	<body>
		<h1>GRD35</h1>
		<p>Bienvenido. Tenga una buena estadia.</p>
	</body>
</html>
# fin de las lineas a agregar

restaurar el contexto de selinux para los directorios y archivos creados
[root@admini ~]# chcon -R -t httpd_sys_content_t /var/www/html/

comprobar el contexto editado
[root@admini ~]# ls -Zd /var/www/html/grd35.local/

# debe salir esto
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/grd35.local/

comprobar la carga del host virtual en el cliente, reiniciar httpd y ver en cliente
[root@admini ~]# systemctl restart httpd

comprobar los logs de acceso
[root@admini ~]# tail /var/log/httpd/grd35.local-access_log

# debe salir algo como esto
192.168.1.20 - - [08/Feb/2022:08:44:59 -0400] "GET / HTTP/1.1" 200 155

cambiar la pertenencia de los directorios y archivos de root al usuario 
administrador de esta forma el administrador podrá agregar mas contenido 
en el sitio web mas adelante
[root@admini ~]# chown -R admini /var/www/html/grd35.local/

comprobar la efectividad del cambio
[root@admini ~]# ls -lZd /var/www/html/grd35.local/

#deberia salir
drwxr-xr-x. admini root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/grd35.local/

Paso 3 - HTTPS

instalar mod_ssl
[root@admini ~]# yum install mod_ssl

agregar el servicio al cortafuegos
[root@admini ~]# firewall-cmd --add-service=https

comentar el ejemplo de virtualhost que esta en /etc/httpd/conf.d/ssl.conf desde <VirtualHost default:443> hasta </VirtualHost>

#ejemplo de comentado
#<VirtualHost default:443>
	#ErrorLog xxxxxxxx
	#TransferLog xxxxxxxxxxxxxxxxx
	#LogLevel xxxxxxxxxxxxxxxxxxxxxxx
	#XXXXXXXXXXXXXXXXXX
#</VirtualHost>

agregar estas lineas debajo de </VirtualHost>
NameVirtualHost *:443

<VirtualHost *:443>
	DocumentRoot /var/www/html/grd35.local
	ServerName web.grd35.local
	ErrorLog /var/log/httpd/grd35.local-ssl_error_log
	TransferLog /var/log/httpd/grd35.local-ssl_access_log
	LogLevel warn
	SSLEngine on
	SSLProtocol all -SSLv2
	SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
	SSLCertificateFile /etc/pki/tls/certs/web.grd35.local.crt
	SSLCertificateKeyFile /etc/pki/tls/private/web.grd35.local.key
</VirtualHost>

creamos los certificados usando openssl
[root@admini ~]# openssl genrsa -des3 -out web.grd35.local.key
con el comando anterior pedira una contraseña, asignarle cualquiera pero no olvidarla!

[root@admini ~]# openssl req -new -key web.grd35.local.key -out web.grd35.local.csr
con el comando anterior pedira una contraseña, no poner ninguna, diligenciar lo demás como ya ha visto

ya que nos seguira pidiendo contraseña para la llave a futuro, ejecutamos los siguientes comandos para solucionarlo
[root@admini ~]# cp web.grd35.local.key web.grd35.local.key.orig
[root@admini ~]# openssl rsa -in web.grd35.local.key.orig -out web.grd35.local.key

creamos el certificado
[root@admini ~]# openssl x509 -req -days 365 -in web.grd35.local.csr -signkey web.grd35.local.key -out web.grd35.local.crt

copiamos el certificado y la llave generados a la ruta correcta
[root@admini ~]# cp web.grd35.local.crt /etc/pki/tls/certs/
[root@admini ~]# cp web.grd35.local.key /etc/pki/tls/private/

reiniciamos el servicio
[root@admini ~]# systemctl restart httpd

asegurense de abrirlo con iexplore en caso que usen cliente windows

forzar que el servidor solo escuche por HTTPS, editando el virtual host original de HTTP
[root@admini ~]# vim /etc/httpd/conf/httpd.conf

<VirtualHost *:80>
	DocumentRoot /var/www/html/grd35.local
	ServerName web.grd35.local
	Redirect / https://web.grd35.local
	ErrorLog /var/log/httpd/grd35.local-error_log
	CustomLog /var/log/httpd/grd35.local-access_log common
</VirtualHost>
